#include <WiFi.h>
#include <NTPClient.h>
#include "ntp.h"

// 定义时区（以小时为单位，例如：+1或-3）
const long gmtOffset = 8;
// 定义夏令时（Daylight Saving Time，DST）的偏移量（通常为0或3600秒）
const int daylightOffset = 0;
// 创建UDP实例
WiFiUDP ntpUDP;
// 创建NTP客户端实例
NTPClient timeClient(ntpUDP, NTP_SERVER, gmtOffset * 3600, daylightOffset * 3600);

void ntp_init(void)
{
  // 启动NTP客户端
  timeClient.begin();
  // 设置时间同步间隔（以毫秒为单位）
  timeClient.setUpdateInterval(60000); // 1分钟更新一次
}
void ntp_task(void *pvParameters)
{
  const TickType_t xFrequency = pdMS_TO_TICKS(1000);
  TickType_t xLastWakeTime;
  xLastWakeTime = xTaskGetTickCount();
  int rssi_total;
  const int rssi_avg_count = 50;
  while (1)
  {
    if (WiFi.status() != WL_CONNECTED)
    {

        vTaskDelayUntil(&xLastWakeTime, xFrequency);
        continue;
    }
    // 更新NTP时间
    timeClient.update();

    if (timeClient.getEpochTime() > 0)
    {
      // 获取成功
      unsigned long epochTime = timeClient.getEpochTime();
      struct tm *ptm = gmtime((time_t *)&epochTime);

      // 年是至1900年后开始计算,所以我们实际使用得+1900
      int year = ptm->tm_year + 1900;
      // 月是从0开始算,所以我们实际使用得+1
      int month = ptm->tm_mon + 1;
      int day = ptm->tm_mday;
      int hour = ptm->tm_hour;
      int minute = ptm->tm_min;
      int second = ptm->tm_sec;

      // 打印时间
      // Serial.printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second);
    }
    else
    {
      // 获取失败，可以在这里进行重试或错误处理
      Serial.println("Failed to get NTP time");
      vTaskDelayUntil(&xLastWakeTime, xFrequency);
    }

    vTaskDelayUntil(&xLastWakeTime, xFrequency);
  }
}
